package cn.ylz.ylmall.common.config;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.*;

import java.util.List;
import java.util.Map;

@Mapper
public interface BaseDao<T>  extends BaseMapper<T> {

	//执行SQL返回对象结果集
	//不select *也可以
	@Select("${sqlStr}")
    IPage<T> pageList(Page page, @Param(value = "sqlStr") String sqlStr);

	@Select("${sqlStr}")
	IPage<Map> pageListMap(Page page, @Param(value = "sqlStr") String sqlStr);

	//执行SQL返回对象结果集
	//不select *也可以
	@Select("${sqlStr}")
    List<T> findList(@Param(value = "sqlStr") String sqlStr);

	@Select("${sqlStr}")
	List<String> findListColumns(@Param(value = "sqlStr") String sqlStr);

	@Select("${sqlStr}")
	List<Map> findListMap(@Param(value = "sqlStr") String sqlStr);

	//获取数据库数据集合 - 指定返回数据的泛型
	@Select("${sqlStr}")
	List<Map<String, String>> findMapList(@Param(value = "sqlStr") String sqlStr);

	//获取数据库表中所有字段
	@Select("${sqlStr}")
	Map<String, Map> findField(@Param(value = "sqlStr") String sqlStr);

	//执行SQL返回对象
	//如果结果集多于1条则抛错
	@Select("${sqlStr}")
    T findObject(@Param(value = "sqlStr") String sqlStr);
	
	//执行SQL返回MAP
	//如果结果集多于1条则抛错
	@Select("${sqlStr}")
    Map<String, String> findMap(@Param(value = "sqlStr") String sqlStr);
	
	//执行SQL返回字符串
	@Select("${sqlStr}")
    String findString(@Param(value = "sqlStr") String sqlStr);
	
	//执行insert SQL
	@Insert("${sqlStr}")
    void insertSql(@Param(value = "sqlStr") String sqlStr);
	
	//执行update SQL
	@Update("${sqlStr}")
    void updateSql(@Param(value = "sqlStr") String sqlStr);
	
	//执行delete SQL
	@Delete("${sqlStr}")
    void deleteSql(@Param(value = "sqlStr") String sqlStr);



}
